|
===================================== 〔語彙分解〕的な部分一致の検索結果は以下の通りです。 ・ テン : [てん] 【名詞】 1. 10 2. ten 3. (P), (n) 10/ten ・ ー : [ちょうおん] (n) long vowel mark (usually only used in katakana) ・ プログラミング : [ぷろぐらみんぐ] 【名詞】 1. programming 2. programing, (n) programming/programing
プログラミングにおけるテンプレートは、静的型付けのC++でデータ型にとらわれずにコードを書くことを可能にする機能であり、C++においてはジェネリックプログラミングに用いられる。 C++においてテンプレートは多重継承や演算子多重定義と並ぶ重要な機能となった。STL (Standard Template Library)はテンプレートによって構築されたフレームワークとなっている。 == 技術的側面 == テンプレートには''関数テンプレート''と''クラステンプレート''がある。関数テンプレートは自由な型の引数を受け取ることができる関数のようなものである。たとえば、標準C++ライブラリにある関数テンプレートmax(x, y)はxとyのうち、大きな方を返す関数テンプレートで、次のように定義できる。 そして次のように呼び出せる。 ここで、Tで表されているものを''テンプレート仮引数'' (''template parameter'') という。コンパイラは実引数として与えられた値の型(''テンプレート実引数''、''template argument''。この例の場合では、この整数型リテラルの型であるint)からTに対応する型を''導出''し、Tに得られたintを当てはめて関数を''実体化''する。このようにして実体化された関数を''特殊化''(あるいは特殊化版、特殊バージョン)という。例のmax(3, 7)に対してはこの特殊化が呼ばれることになる。なお、実体化のことを''具現化''と呼ぶこともある。 この場合xとyがどんな型でも「x < y」という式が生成される。またユーザー定義型の場合も、<演算子が適切に多重定義されていればその型に対してmaxが使える。同様の例は他にもあり、STLには適切な演算子が定義されていれば利用可能になるという関数テンプレートが数多く存在する。例えば<演算子が定義されていれば、sort(), stable_sort(), binary_search()や配列からヒープ構造を作成するアルゴリズム、setなどのコンテナなどが利用可能になる。 逆に標準ライブラリにある複素数を表す型のcomplexには<演算子が定義されていない。複素数には強い順序付けが存在しないからである。そのためmax(x, y)という呼出はxとyが複素数の場合コンパイルエラーになる。このように<演算子を必要とするテンプレートでcomplexを使用することはできない。困ったことにこの種のエラーでは難解なエラーメッセージが出力されてしまう。そのためテンプレートが関わるエラーを出さないように、利用する関数テンプレートの仕様をあらかじめよく確認する方が良い。 一般的に、そのようなテンプレート実引数に対する要求は、コンセプト (concept) や要件 (requirement) などとして別途文書によって記述されている。標準C++ライブラリのstd::max関数テンプレート (X3014 25.3.7) では、そのテンプレート実引数が''LessThanComparable''でなければならないと定められている。ある型がLessThanComparableであるためには、正にa < bという演算ができなければならない (X3014 20.1.2) と定められているのである。 クラステンプレートはテンプレートをクラスに当てはめたものである。汎用的なコンテナの作成によく用いられる。たとえばSTLにはリンクリストとしてlistが存在する。整数のリストを作りたければlist 抄文引用元・出典: フリー百科事典『 ウィキペディア(Wikipedia)』 ■ウィキペディアで「テンプレート (プログラミング)」の詳細全文を読む スポンサード リンク
|